導讀:QQ會(huì )員活動(dòng)運營(yíng)平臺(AMS),是QQ會(huì )員增值運營(yíng)業(yè)務(wù)的重要載體之一,承擔海量活動(dòng)運營(yíng)的Web系統。在過(guò)去四年的時(shí)間里,AMS日請求量從200-500萬(wàn)的階段,一直增長(cháng)到日請求3-5億,最高CGI日請
發(fā)表日期:2020-02-01
文章編輯:興田科技
瀏覽次數:7001
標簽:
QQ會(huì )員活動(dòng)運營(yíng)平臺(AMS),是QQ會(huì )員增值運營(yíng)業(yè)務(wù)的重要載體之一,承擔海量活動(dòng)運營(yíng)的Web系統。在過(guò)去四年的時(shí)間里,AMS日請求量從200-500萬(wàn)的階段,一直增長(cháng)到日請求3-5億,最高CGI日請求達到8億。在這個(gè)過(guò)程中,AMS在架構方面發(fā)生了大幅度的調整和變遷,我們走過(guò)了一段非常難忘的技術(shù)歷程。
本文將會(huì )分享QQ會(huì )員活動(dòng)運營(yíng)平臺的架構設計實(shí)踐,希望對做技術(shù)的同學(xué)有所幫助。
一、海量活動(dòng)運營(yíng)的挑戰和我們的應對思路
一個(gè)產(chǎn)品業(yè)務(wù)的發(fā)展總是離不開(kāi)運營(yíng)二字,而運營(yíng)的表現形式很多會(huì )體現到活動(dòng)需求上,越是重運營(yíng)的產(chǎn)品業(yè)務(wù),通常會(huì )產(chǎn)生越多的活動(dòng)運營(yíng)開(kāi)發(fā)需求。
當我們說(shuō)起“活動(dòng)”,很多人的第一反應會(huì )覺(jué)得這是一個(gè)并不會(huì )有很多技術(shù)難度的一個(gè)東西。通常來(lái)說(shuō),如果我們只做1-2個(gè)活動(dòng),那的確是沒(méi)有太多技術(shù)難度的,但是,如果我們將這個(gè)量級提升到做1000個(gè)活動(dòng),甚至更多的時(shí)候,這就成為一個(gè)的技術(shù)難題。
1. 活動(dòng)運營(yíng)業(yè)務(wù)的挑戰和難題
(1)騰訊SNG增值業(yè)務(wù)面臨海量活動(dòng)運營(yíng)開(kāi)發(fā)的挑戰
騰訊的增值產(chǎn)品部在QQ會(huì )員體系、游戲運營(yíng)、個(gè)性化等各個(gè)業(yè)務(wù)上都需要持續高強度的運營(yíng)性活動(dòng)來(lái)促進(jìn)用戶(hù)的拉新、活躍和留存,這里本身已經(jīng)產(chǎn)生了非常多的運營(yíng)需求。而且,自2014年開(kāi)始,隨著(zhù)移動(dòng)互聯(lián)網(wǎng)邁向成熟階段,手Q平臺上的手游運營(yíng)需求大爆發(fā),一個(gè)月需要上線(xiàn)的活動(dòng)出現數倍的增長(cháng)。
(2)活動(dòng)開(kāi)發(fā)的復雜性
開(kāi)發(fā)一個(gè)活動(dòng)本身需要一定的工作量。尤其是大型的推廣活動(dòng),這類(lèi)型的活動(dòng)對功能和性能的要求比較高。一個(gè)典型的大型活動(dòng)通常有數千萬(wàn)的用戶(hù)參與,因此,對性能要求比較高,如果再涉及到“秒殺”或者“搶購”類(lèi)型的高并發(fā)功能時(shí),對于基礎支撐系統是一個(gè)強力的挑戰。
活動(dòng)功能眾多,包括禮包、抽獎、分享、邀請、兌換、排行、支付等,這些不同的參與和表現形式,也會(huì )涉及更多的后端接口通信和聯(lián)調。例如,我們的游戲運營(yíng)業(yè)務(wù)涉及上百款游戲,而不同的游戲對應不同的服務(wù)接口,就游戲相關(guān)的通信接口,就涉及上千個(gè)。
還有一個(gè)非常重要的問(wèn)題,就是活動(dòng)運營(yíng)的安全和可靠性。因為,我們的活動(dòng),大多涉及較重要的實(shí)物獎品發(fā)放,如iphone、ipad等高價(jià)值禮包,對安全要求很高。
(3)活動(dòng)運營(yíng)開(kāi)發(fā)人力難題
傳統手工開(kāi)發(fā)模式,普通活動(dòng)也需要1周的開(kāi)發(fā)周期,而典型大型活動(dòng)更是需要1-2周開(kāi)發(fā)周期,開(kāi)發(fā)和測試工作量繁重。并且,很多活動(dòng)是在指定節假日推廣,通常有嚴格上線(xiàn)時(shí)間要求。在緊迫并且快速增長(cháng)的運營(yíng)需求面前,人力非常有限。
目前,全年活動(dòng)上線(xiàn)超過(guò)4300個(gè)。
2. 活動(dòng)本質(zhì)和我們的方法論
通過(guò)對不同業(yè)務(wù)的活動(dòng)模式的分析和抽象,我們發(fā)現事實(shí)上絕大部分活動(dòng)都可以用一組“條件”和“動(dòng)作”的方式進(jìn)行抽象和封裝,進(jìn)而形成通用的“條件”(Rule)和“動(dòng)作”(Operation)活動(dòng)組件,不同條件和動(dòng)作的組合使用,變成活動(dòng)邏輯的實(shí)現。然后,我們希望通過(guò)平臺化和框架驅動(dòng)開(kāi)發(fā)的方式,將這些組件統一封裝。同時(shí),在框架和平臺層面,為活動(dòng)組件的運行提供高可靠、高性能、具備過(guò)載保護和水平擴展能力的框架支撐環(huán)境。
活動(dòng)組件只需要封裝自身業(yè)務(wù)邏輯,核心功能框架自動(dòng)支持,從而實(shí)現活動(dòng)運營(yíng)開(kāi)發(fā)的徹底自動(dòng)化。
AMS所需要承擔的任務(wù),就是實(shí)現這個(gè)規劃。需要面臨的,主要是解決三個(gè)方面的問(wèn)題:
(1)建設高效活動(dòng)開(kāi)發(fā)模式(運營(yíng)開(kāi)發(fā)自動(dòng)化)。
(2)搭建高可靠性和高可用性的運營(yíng)支撐平臺。
(3)保證活動(dòng)運營(yíng)業(yè)務(wù)的安全。
二、構建高效活動(dòng)運營(yíng)開(kāi)發(fā)模式
2012年初,也就是在A(yíng)MS產(chǎn)生之前的活動(dòng)開(kāi)發(fā)模式,相對比較隨意,也并沒(méi)有一套嚴格和完整的框架支持,組件的復用程度不夠高。因此,我們開(kāi)發(fā)一個(gè)活動(dòng),經(jīng)常需要耗時(shí)1周多。當時(shí),開(kāi)發(fā)活動(dòng)的其中一個(gè)特點(diǎn)就是“各自為政”,每個(gè)運營(yíng)開(kāi)發(fā)同學(xué),各自產(chǎn)生了一批前端和后端組件,CGI層也產(chǎn)生了很多不同規則的入口。這些各自實(shí)現的組件,結構比較凌亂,不成體系,維護起來(lái)也比較困難。最重要的是,這樣的組件對于活動(dòng)開(kāi)發(fā)來(lái)說(shuō),使用復雜,復用率低,以至于開(kāi)發(fā)效率也比較低。
在當時(shí),活動(dòng)運營(yíng)需求也出現了一定程度上的堆積,很多需求沒(méi)有人力支持,產(chǎn)品同學(xué)也覺(jué)得我們上線(xiàn)活動(dòng)比較慢。
1. 系統架構分層和統一
基于這個(gè)問(wèn)題,我們當時(shí)想到的第一個(gè)解決方案,就是整合前端和后端組件,重新搭建一個(gè)結構清晰和統一的系統。將這個(gè)系統的接口分層、復用、簡(jiǎn)化的原則,逐步構建一個(gè)完整的體系。而且,從我們開(kāi)發(fā)的角度來(lái)說(shuō),最重要的目的,是為減少活動(dòng)開(kāi)發(fā)的工作量,解放開(kāi)發(fā)人員,提升研發(fā)效率。
我們的前端組件通過(guò)一個(gè)叫Zero的框架統一整合,前端每一個(gè)功能以組件的形式出現,統一維護和復用。CGI層則進(jìn)行了代碼重構,實(shí)行框架驅動(dòng)式開(kāi)發(fā),將每一個(gè)業(yè)務(wù)邏輯功能,收歸到一個(gè)唯一的入口和統一的體系中。核心功能框架自動(dòng)支持,已有活動(dòng)功能組件可直接配置使用。如果沒(méi)有新的功能接入,運營(yíng)開(kāi)發(fā)只需要配置一份簡(jiǎn)單的參數,就可以完成后端功能邏輯,不再需要寫(xiě)代碼。對于基礎支撐服務(wù),則以平臺化的模式進(jìn)行管理,做統一接入和維護。
當我們做完系統結構的調整后,我們終于實(shí)現,通過(guò)一份活動(dòng)配置,來(lái)控制前端和后端的組件組合。每一個(gè)條件、發(fā)貨等動(dòng)作,都可以隨意動(dòng)態(tài)組合,參與條件通過(guò)“與”、“或”、“非”等組合方式,選擇對應的動(dòng)作,實(shí)現活動(dòng)功能邏輯。
從那時(shí)開(kāi)始,活動(dòng)開(kāi)發(fā)變得簡(jiǎn)單了不少,需要寫(xiě)的代碼大幅度減少,基本變成“填寫(xiě)參數”的工作。一個(gè)活動(dòng)項目的代碼從之前的1000-2000行,變成了不到100行。
例如,如下圖中,本來(lái)需要寫(xiě)不少邏輯代碼的領(lǐng)取禮包,在前端只變成了一行參數。
清晰的結構提升了系統可維護性,更為重要的是,活動(dòng)開(kāi)發(fā)效率也得到了極大的提升。
在開(kāi)發(fā)人力不變的情況下,我們活動(dòng)開(kāi)發(fā)的效率實(shí)現了大幅提升,產(chǎn)品的需求積壓的情況,得到有效的緩解。
2. 高可視化開(kāi)發(fā)模式(自動(dòng)化運營(yíng))
然而,到了2014年,隨著(zhù)“移動(dòng)互聯(lián)網(wǎng)“的快速發(fā)展和逐步成熟,我們也迎來(lái)了”手游大爆發(fā)“時(shí)代。因為手游的開(kāi)發(fā)周期更快,幾乎每個(gè)月都有很多款新的手游上線(xiàn),很快手游活動(dòng)運營(yíng)的需求出現了爆發(fā)式的增長(cháng)。AMS承擔的活動(dòng)需求,迅速從每個(gè)月上線(xiàn)60多個(gè)上升到200個(gè)的量級,在此背景下,開(kāi)發(fā)人力再次捉襟見(jiàn)肘,需求的積壓?jiǎn)?wèn)題進(jìn)一步加劇。
既然說(shuō)到開(kāi)發(fā)人力,就必須介紹一下我們當前的活動(dòng)項目模式。我們騰訊是一家成熟的互聯(lián)網(wǎng)公司,研發(fā)流程的每一個(gè)環(huán)節(設計、重構、開(kāi)發(fā)、體驗/測試、發(fā)布),都由不同獨立角色完成。一個(gè)普通的移動(dòng)端活動(dòng)項目耗時(shí),按照最最快速、最理想的模式計算:設計1天,重構1天,開(kāi)發(fā)2天,體驗/測試1天,也至少需要5天工作日 ,也就是研發(fā)周期至少1周時(shí)間。理想是美好的,現實(shí)總是殘酷的。在實(shí)際項目實(shí)施過(guò)程中,因為各種資源協(xié)調和外部因素影響,通常無(wú)法達到如此完美的配合,因此,一個(gè)普通活動(dòng)的研發(fā)周期,往往都超過(guò)1周。
忽然新增100多個(gè)需求,無(wú)論對于任何團隊來(lái)說(shuō),都是一個(gè)巨大的壓力。
于是,我們不得不采用另外一種思路,來(lái)看待活動(dòng)運營(yíng),是否可以嘗試不投入開(kāi)發(fā)人力?我們稱(chēng)之為“自動(dòng)化運營(yíng)“, 自動(dòng)化的本質(zhì),就是構建足夠強大的平臺和工具支撐,讓運營(yíng)同學(xué)自己完成活動(dòng)開(kāi)發(fā)。
前面,我們提到,開(kāi)發(fā)普通活動(dòng)時(shí),每一個(gè)功能點(diǎn)已經(jīng)變成了一份簡(jiǎn)單的配置,而活動(dòng)開(kāi)發(fā)的工作,就是將這個(gè)配置的活動(dòng)參數填入到頁(yè)面按鈕上。如果,我們實(shí)現一個(gè)可視化工具,將這個(gè)填寫(xiě)配置的工作,變成拖拽按鈕的功能,這樣就可以徹底告別“寫(xiě)代碼“的工作。
最終的結果,是我們做一個(gè)可視化拖拽的活動(dòng)模板系統。運營(yíng)同學(xué)只需要經(jīng)過(guò)適當的培訓,就能學(xué)會(huì )如何使用。首先,運營(yíng)同學(xué)將活動(dòng)設計圖上傳,模板系統自動(dòng)切圖(完成重構工作),然后,配置活動(dòng)功能,通過(guò)拖拽按鈕功能組件(本質(zhì)上是一個(gè)p透明蒙層),插入到頁(yè)面中。然后點(diǎn)擊體驗和發(fā)布,最終完成活動(dòng)上線(xiàn)。因為我們的功能組件是早就經(jīng)過(guò)嚴格測試,才提供給運營(yíng)同學(xué)使用,通常不需要技術(shù)測試同學(xué)來(lái)做測試。
因為從那時(shí)開(kāi)始,運營(yíng)同學(xué)開(kāi)始大規模替代開(kāi)發(fā)、重構、測試的工作,然而,她們是一群不了解技術(shù)細節的人,這里也無(wú)形增加了活動(dòng)的上線(xiàn)風(fēng)險。因此,除了這個(gè)活動(dòng)模板的實(shí)現之外,我們還根據AMS平臺的特性,搭建了一系列的支撐平臺和工具。
簡(jiǎn)而言之,就是為了避免“人為的失誤“,人的失誤不能靠人本身來(lái)避免,而要靠平臺和程序來(lái)保證和檢測。因此,我們建設了強大而且智能的配置檢查系統和活動(dòng)數據監控。舉個(gè)例子,本來(lái)資源池里有100個(gè)禮券,但是,運營(yíng)同學(xué)誤配置為200個(gè),這個(gè)時(shí)候平臺就會(huì )檢測并且提示運營(yíng)同學(xué),這里配置不正確。
自動(dòng)化運營(yíng)給我們帶來(lái)了研發(fā)流程級別的優(yōu)化,在活動(dòng)研發(fā)流程中,我減少了重構、開(kāi)發(fā)和測試的流程,使得活動(dòng)項目研發(fā)周期大幅度縮短,活動(dòng)項目研發(fā)效率出現質(zhì)的飛躍。手游運營(yíng)需求的積壓?jiǎn)?wèn)題,得到根本和徹底的解決。
我們的高效活動(dòng)開(kāi)發(fā)模式的構建完成,也促使我們的AMS平臺業(yè)務(wù)規??焖俚脑鲩L(cháng)。我們一個(gè)月上線(xiàn)的活動(dòng)項目數,在2015年10月時(shí),上線(xiàn)活動(dòng)超過(guò)400個(gè),而其中有80%以上屬于運營(yíng)同學(xué)“開(kāi)發(fā)“的模板活動(dòng)。
三、可靠性與性能支撐建設
我們通過(guò)構建高效的活動(dòng)開(kāi)發(fā)模式,促使我們AMS運營(yíng)平臺的業(yè)務(wù)規模和流量規模,都在過(guò)去的三年多時(shí)間里,出現了100倍的增長(cháng),同時(shí)在線(xiàn)的活動(dòng)超過(guò)1000個(gè)。與此同時(shí),AMS平臺的可靠性和穩定性,也成為至關(guān)重要的指標之一,平臺如果出問(wèn)題,影響面變得很廣。
AMS平臺的架構分為四個(gè)層級,分別為:入口層、業(yè)務(wù)邏輯層、服務(wù)層、存儲層(CKV的NoSQL存儲),還有一個(gè)離線(xiàn)服務(wù)和監控系統。
1. 可靠性
活動(dòng)運營(yíng)業(yè)務(wù),對平臺的可靠性非常敏感,因為這里涉及到很多高價(jià)值禮包的發(fā)放,部分還涉及支付環(huán)節,穩定壓倒一切。
在保證可用性方面,我們做幾個(gè)方面的工作:
在告警監控方面,AMS平臺的建設更為嚴格,我們力求多渠道告警(rtx、微信、郵件、短信),多維度監控(L5、模塊間調用、自動(dòng)化測試用例、AMS業(yè)務(wù)監控維度等)。即使某些監控維度失效,我們同樣可以第一時(shí)間發(fā)現問(wèn)題。當然,我們也會(huì )控制告警的周期和算法,做到盡量減少騷擾,同時(shí),又能真正發(fā)現系統問(wèn)題。
可靠性另外的一個(gè)挑戰,就是過(guò)載保護。不管我們系統擁有多少機器,在某些特殊場(chǎng)景下,終究有過(guò)載的風(fēng)險,例如“秒殺“和”定時(shí)開(kāi)啟“之類(lèi)的推廣面前。AMS當前同時(shí)在線(xiàn)的活動(dòng)超過(guò)1000,已經(jīng)太多了,這些活動(dòng)中,偶爾總會(huì )有大流量推廣,并且業(yè)務(wù)方甚至根本沒(méi)有周知到我們。無(wú)論在何種場(chǎng)景下,我們必須做到AMS平臺本身不能”雪崩“,如果集群掛掉,就影響全量用戶(hù),而做過(guò)載保護只是拋棄掉了部分用戶(hù)請求,大部分用戶(hù)還是能夠獲得正常的服務(wù)。
在過(guò)載保護方面,我們采取了一些并不復雜的措施:
2. 秒殺場(chǎng)景的業(yè)務(wù)保護
秒殺在活動(dòng)運營(yíng)中,是比較常見(jiàn)的一種參與形式,它帶來(lái)的挑戰除了流量沖擊的問(wèn)題,還會(huì )帶來(lái)高并發(fā)下的業(yè)務(wù)邏輯安全問(wèn)題。這個(gè)時(shí)候,我們必須引入適當的鎖機制,來(lái)規避這些問(wèn)題。它和線(xiàn)程安全是同一類(lèi)型的問(wèn)題。
首先是用戶(hù)的session鎖,也就是說(shuō),同一個(gè)子活動(dòng)功能中,同一個(gè)用戶(hù),在前一次發(fā)貨請求結束之前,禁止第二個(gè)請求。之所以要這樣做,是因為,如果同一個(gè)用戶(hù)發(fā)起兩個(gè)并發(fā)請求,在一個(gè)臨界時(shí)間內,可能導致禮包多發(fā)。
例如下圖中的A用戶(hù),在第一個(gè)請求成功寫(xiě)入參與成功標志位之前,第二請求是可以通過(guò)“條件判斷“,仍然可以進(jìn)入發(fā)貨環(huán)節,這樣的話(huà),就可能會(huì )讓A用戶(hù)獲得2個(gè)禮包。
還有一個(gè)鎖是基于多個(gè)用戶(hù)的秒殺保護鎖,場(chǎng)景是類(lèi)似的,Session鎖,只是變?yōu)槎鄠€(gè)并發(fā)用戶(hù),請求同一個(gè)禮包,同樣在判斷禮包余量數目的臨界時(shí)間里,有可能產(chǎn)生“超發(fā)“(禮包多發(fā)了)。
問(wèn)題很明顯,采用鎖當然就可以解決,但是,采用何種的鎖機制,又是一個(gè)值得思考的問(wèn)題。因為,業(yè)務(wù)場(chǎng)景不同,選擇的解決方案自然不同。我們從三個(gè)不同的思路,來(lái)討論秒殺的實(shí)現機制。
我們業(yè)務(wù)鎖采用的是樂(lè )觀(guān)鎖的實(shí)現方式,因為我們的一個(gè)發(fā)貨流程通常耗時(shí)超過(guò)100ms,在高并發(fā)下,都容易產(chǎn)生請求積壓,導致我們無(wú)法做到實(shí)時(shí)反饋。我們的實(shí)現,確保不管用戶(hù)是否請求秒殺成功,都能在500ms內獲得實(shí)時(shí)反饋。并且,我們將這個(gè)實(shí)現廣泛使用到各個(gè)秒殺和搶購活動(dòng)中,曾經(jīng)支撐過(guò)5w/s的秒殺活動(dòng),表現非常平穩和安全。
四、業(yè)務(wù)安全體系建設
隨著(zhù)業(yè)務(wù)規模的增長(cháng),AMS平臺每天發(fā)出去的發(fā)貨操作也越來(lái)越多。在非節假日每天發(fā)貨5000多萬(wàn),在高峰的時(shí)候,發(fā)貨超過(guò)2億。同時(shí),這里活動(dòng)中含有很多高價(jià)值的東西,例如ipad、iphone、高價(jià)值虛擬道具,甚至還有一些活動(dòng)推廣使用現金禮包(財付通到賬)。
如此,我們的業(yè)務(wù)安全比普通的互聯(lián)網(wǎng)產(chǎn)品的要求更高,更嚴格。
1. 傳統安全打擊維度和惡意用戶(hù)
成熟的互聯(lián)網(wǎng)公司通常都會(huì )有自己的安全團隊,一般通過(guò)數據建模的方式,搭建出一個(gè)惡意用戶(hù)黑名單的數據庫,然后持續維護這些惡意賬號和Ip等信息,更新數據。然后,我們這個(gè)服務(wù)接入到里面去。惡意工作室手持大量的賬號和Ip,而我們通過(guò)這個(gè)惡意數據庫,將它們攔截掉。
但是,數據建模的算法不管如何精細,為了防止誤殺真實(shí)用戶(hù),總會(huì )存在打擊率的問(wèn)題,它們通常無(wú)法攔截下全部惡意請求,總會(huì )有少數的漏網(wǎng)之魚(yú)。
而我們所思考的,就是在這個(gè)基礎上,結合業(yè)務(wù),增加新的安全保護策略??赡軙?huì )有很多人會(huì )想,追加參與門(mén)檻是否可以取得進(jìn)一步的保護效果呢?例如,在傳統安全打擊策略的基礎上,再加上業(yè)務(wù)限制,例如將活動(dòng)參與條件設置為超級會(huì )員(20元一個(gè)月的付費會(huì )員),這樣的話(huà),我們以更高的門(mén)檻來(lái)攔截惡意請求。
在以前很長(cháng)一段時(shí)間里,我都認為這種方法應該是靠譜的,因為提高了參與的門(mén)檻。直到有一次,我們捕獲到一批好幾萬(wàn)的惡意QQ號碼(都是一些號碼很長(cháng)的垃圾號碼),它們竟然全部都是超級會(huì )員,惡意工作室竟然花費了不少錢(qián)給它們開(kāi)通20塊錢(qián)一個(gè)月的超級會(huì )員。從那個(gè)時(shí)候開(kāi)始,我開(kāi)始明白,付費會(huì )員身份限制,也是不可靠的。
超級會(huì )員的身份帶給這些惡意號碼更多的便利,反而可以給它們獲取更多高價(jià)值禮包的機會(huì ),將獲得東西兌現成金錢(qián),然后覆蓋掉惡意工作室的“投資成本”。
2. 業(yè)務(wù)安全支撐體系建設
AMS建設多個(gè)維度,全方面的安全支撐能力。我們將這些安全建設,又分為四個(gè)維度:
關(guān)于我們:
小時(shí)光茶社(Tech Teahouse),由Tencent SNG增值產(chǎn)品部技術(shù)團隊創(chuàng )建,用于技術(shù)分享和交流。
上一篇:
了解用戶(hù)——卡片分類(lèi)法更多新聞
2022
現在越來(lái)越多企業(yè)都比較注重網(wǎng)站建設工作,原因就是通過(guò)企業(yè)建站確實(shí)能帶來(lái)很好引流效果,讓推廣營(yíng)銷(xiāo)成本和...
View details
2023
海外網(wǎng)站建設的重要性在當前全球化的時(shí)代,擁有一個(gè)海外網(wǎng)站可以幫助企業(yè)拓寬市場(chǎng),獲得更多的國際客戶(hù)。。...
View details
2023
云浮網(wǎng)站建設的重要性作為一個(gè)企業(yè)或個(gè)人,擁有一個(gè)專(zhuān)業(yè)、可靠的網(wǎng)站對于成功開(kāi)展業(yè)務(wù)至關(guān)重要。。在現代社...
View details
2023
什么是榆林網(wǎng)絡(luò )優(yōu)化?榆林網(wǎng)絡(luò )優(yōu)化是指通過(guò)優(yōu)化網(wǎng)站、內容和在線(xiàn)渠道,以提高榆林地區企業(yè)的在搜索引擎結果...
View details